package LigacaoBd;

import java.util.*;
import java.io.*;

public class SQLCache {
     
     private Properties props = new Properties();
     
     private static final String SQL_FILE = "C:\\Users\\joao\\Documents\\NetBeansProjects\\trunk\\Virtual MStand\\sql.properties";
    
     public void loadSQLStatements() {
                try {
                        // carrega as instrucoes SQL a partir de um ficheiro de propriedades
                        FileInputStream in = new FileInputStream(SQL_FILE);
                        props.load(in);
                        in.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
     /**
      * Método chamado antes de executar uma query, para substituir
      * as variáveis na query pelos parâmetros devidos.
      * Os parâmetros estão guardados numa Hastable
      * (ver http://java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.html)
      */
     public String compileQuery(String qryName, Hashtable params) throws
             Exception {
         String qry = getSQLStatement(qryName);
         for(Enumeration enu = params.keys(); enu.hasMoreElements();) {
             String key = (String) enu.nextElement();
             String value =(String) params.get(key);
             qry = qry.replaceAll(key,value);            
            
         }
         return qry;
     }
     /**
      * Método que verifica se uma instrução SQL existe
      */
     public String getSQLStatement(String sqlName) throws Exception {
         String sqlStm = (String) props.get(sqlName);
         if(sqlStm == null) {
             throw new Exception("A instrução SQL não foi encontrada.");
         } else {
             return sqlStm;
         }
     }
}